// Modules to control application life and create native browser window
// const { app, BrowserWindow, ipcMain, webContents} = require('electron')
const { app, BrowserWindow, ipcMain, dialog, webContents, globalShortcut } = require('electron')
// 保持对window对象的全局引用，如果不这么做的话，当JavaScript对象被
// 垃圾回收的时候，window对象将会自动的关闭
let win

const path = require('path')

const Menu = require('electron').Menu


function createWindow() {
    Menu.setApplicationMenu(null)
    // Create the browser window.
    win = new BrowserWindow({
        width: 1200,
        height: 900,
        webPreferences: {
            nodeIntegration: true,
            nativeWindowOpen: true,
            contextIsolation: false,
            enableRemoteModule: true,
            frame: false, //取消window自带的关闭最小化等
            resizable: false, //禁止改变主窗口尺寸
            preload: path.join(__dirname, 'preload.js')
        }
    })
    // win.webContents.openDevTools()
    // and load the index.html of the app.
    win.loadFile('login.html')
    // 当 window 被关闭，这个事件会被触发。
    win.on('closed', () => {
        // 取消引用 window 对象，如果你的应用支持多窗口的话，
        // 通常会把多个 window 对象存放在一个数组里面，
        // 与此同时，你应该删除相应的元素。
        win = null
    })

    // 在开发环境和生产环境均可通过快捷键打开devTools
    globalShortcut.register('CommandOrControl+Shift+i', function () {
        win.webContents.openDevTools()
    })
    // 继续添加其他快捷键
    /*******************实现代码************************** */
    win.webContents.session.on('will-download', (event, item, webContents) => {
        //设置文件存放位置，如果用户没有设置保存路径，Electron将使用默认方式来确定保存路径（通常会提示保存对话框）
        item.setSavePath(savepath+'/'+fileName)
        console.log(savepath + '/'+fileName)
        item.on('updated', (event, state) => {
            if (state === 'interrupted') {
                console.log('Download is interrupted but can be resumed')
                win.webContents.send('downstate', 'cancel')
            } else if (state === 'progressing') {
                if (item.isPaused()) {
                    console.log('Download is paused')
                } else {
                    console.log(`Received bytes: ${item.getReceivedBytes()}`)
                    win.webContents.send('downstate', 'start')
                }
            }
        })
        item.once('done', (event, state) => {
            if (state === 'completed') {
                console.log('Download successfully')
                //回显 调用渲染进程方法
                win.webContents.send('downstate', state)
            } else {
                console.log(`Download failed: ${state}`)
                //回显 调用渲染进程方法
                win.webContents.send('downstate', state)
            }
        })
    })
    /*******************实现代码************************** */

}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
    app.on('activate', function () {
        // On macOS it's common to re-create a window in the app when the
        // dock icon is clicked and there are no other windows open.
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

// Electron 会在初始化后并准备
// 创建浏览器窗口时，调用这个函数。
// 部分 API 在 ready 事件触发后才能使用。
var savepath = ''
var fileName = ''
app.on('ready', () => {
    createWindow();

    // 监听子页面传送的信息
    //1.1 异步

    ipcMain.on('openPage', (e, val) => {
        e.sender.send('returnOpenPage', '通信成功!') // 返回版本号给渲染进程
        // 切换到主页面
        win.loadFile('index.html')
    })

    ipcMain.on('backPage', (e, val) => {
        e.sender.send('returnOpenPage', '通信成功!') // 返回版本号给渲染进程
        // console.log(val)
        // 切换到主页面
        win.loadFile(val+'.html')
    })

    ipcMain.on('downloadExcel', (e, val) => {
        fileName = val+'.xlsx'
        const downloadpath = 'https://dev.qwop.cn/api/download/excel/'+fileName
        // const downloadpath = path.resolve(__dirname, './table/'+val+'.excel')
        console.log(downloadpath)
        // 切换到主页面
        dialog.showOpenDialog({
            //默认路径
            defaultPath: '../Desktop',
            //选择操作，此处是打开文件夹
            properties: [
                'openDirectory',
            ],
            //过滤条件
            filters: [
                { name: 'All', extensions: ['*'] },
            ]
        }, function (res) {
            //回调函数内容，此处是将路径内容显示在input框内
            downloadFolder.value = res[0];
        }).then(result=>{

            // 获取到了存放文件的路径
            // console.log(result.filePaths[0])
            savepath = result.filePaths[0];
            win.webContents.downloadURL(downloadpath);
        }).catch(error=>{
            console.log(error)
        })
    })

    

    

    // //1.2 同步
    // ipcMain.on('messageSync', (e, val) => {
    //     e.returnValue = '这是同步向渲染进程render.js中返回的数据';
    // })
})
// 当全部窗口关闭时退出。
app.on('window-all-closed', () => {
    // 在 macOS 上，除非用户用 Cmd + Q 确定地退出，
    // 否则绝大部分应用及其菜单栏会保持激活。
    if (process.platform !== 'darwin') {
        app.quit()
    }
})